package epucjr.psicopuc.tecnologia;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Query;

public class GeradorQueryLucene {
	
	/************************
	 * ATRIBUTOS
	 ***********************/
	private String searchQuery;
	private QueryParser queryParser;
	private Query luceneQuery;
	
	/************************
	 * CONSTRUTOR
	 ***********************/
	public GeradorQueryLucene() {
		this.setSearchQuery("");
		this.queryParser = new QueryParser("nome", new StandardAnalyzer());
	}
	
	/************************
	 * METODOS
	 ***********************/
	public void gerarQueryLucene(String nome, String deficiencia, String escolaridade, String informatica, String idioma, String experienciaProfissional, String areaDeInteresse
			, String cpf, String rg, String idade, String sexo,  String cidade, String estado, String bairro) throws ParseException{
		
		if(nome == null || nome.equals("")){
			nome = "\"\"";
		}
		if(deficiencia == null || deficiencia.equals("")){
			deficiencia = "\"\"";
		}
		if(escolaridade == null || escolaridade.equals("")){
			escolaridade = "\"\"";
		}
		if(informatica == null || informatica.equals("")){
			informatica = "\"\"";
		}
		if(idioma == null || idioma.equals("")){
			idioma = "\"\"";
		}
		if(bairro == null || bairro.equals("")){
			bairro = "\"\"";
		}
		if(experienciaProfissional == null || experienciaProfissional.equals("")){
			experienciaProfissional = "\"\"";
		}
		if(areaDeInteresse == null || areaDeInteresse.equals("")){
			areaDeInteresse = "\"\"";
		}
		if(cpf == null || cpf.equals("")){
			cpf = "\"\"";
		}
		if(rg == null || rg.equals("")){
			rg = "\"\"";
		}
		if(idade == null || idade.equals("")){
			idade = "\"\"";
		}
		if(sexo == null || sexo.equals("")){
			sexo = "\"\"";
		}
		if(cidade == null || cidade.equals("")){
			cidade = "\"\"";
		}
		if(estado == null || estado.equals("")){
			estado = "\"\"";
		}
		if(bairro == null || bairro.equals("")){
			bairro = "\"\"";
		}
		
		System.out.println("nomePassadoGQL71: " + nome);
		
		this.setSearchQuery("nome:" + nome + " OR idade:" + idade + " OR sexo:" + sexo + " OR endereco.estado:" + estado + " OR endereco.cidade:" + cidade + " OR endereco.bairro:" + bairro +" OR rg:" + rg +" OR cpf:" + cpf +" OR curriculo.experienciasProfissional.possuiExperiencia:" + experienciaProfissional +" OR curriculo.deficiencias.tipoDeDeficiencia:" + deficiencia +" OR curriculo.escolaridade.escolaridade:" + escolaridade +" OR curriculo.idiomas.nomeDoIdioma:" + idioma +" OR curriculo.informaticas.conhecimentoEmInformatica:" + informatica +" OR curriculo.areaDeInteresse:" + areaDeInteresse +" ");
		
		this.setLuceneQuery(this.getQueryParser().parse(this.getSearchQuery()));
		System.out.println("GQL:33: " + this.getLuceneQuery().toString());
							
	}
	
	
 	public void buscarAlgoSTest(){
		searchQuery = "Caio OR cpf:1245";
		
		try{
			luceneQuery = queryParser.parse(searchQuery);
		}
		catch (ParseException e) {
			throw new RuntimeException("Unable to parse query: " + searchQuery, e);
		}
	}
	
	public void buscarAlgo(String nome, String deficiencia, String escolaridade, String informatica, String idioma, String trabalhou, String areaDeInteresse
			, String cpf, String rg, String idade, String sexo,  String cidade, String estado, String bairro){
		
		
		/*
		searchQuery = "nome:" + nome + " AND deficiencia.tipoDeDeficiencia:" + deficiencia + "  escolaridade.escolaridade:" + escolaridade +  
		"  informatica.conhecimentoEmInformatica:" + informatica + "  idioma.nomeDoIdioma:" + idioma +"  curriculo.trabalhou:" + trabalhou + "  curriculo.areaDeInteresse:" + areaDeInteresse +
		"  cpf:" + cpf + "  rg:" + rg + "  idade:" + idade + "  sexo:" + sexo + "  endereco.rua:" + rua + "  endereco.cidade:"
		+ cidade + "  endereco.estado:" + estado + "  endereco.bairro:" + bairro + "  endereco.cep:" + cep;
		*/
		//GeradorDeQuery geradorDeQuery = new GeradorDeQuery();
		
/*		searchQuery = geradorDeQuery.verificaNome(nome) + geradorDeQuery.verificaTipoDeDeficiencia(deficiencia) + geradorDeQuery.verificaEscolaridade(escolaridade) + 
		geradorDeQuery.verificaInformatica(informatica) + geradorDeQuery.verificaIdiomas(idioma) + geradorDeQuery.verificaTrabalhou(trabalhou) + 
		geradorDeQuery.verificaAreaDeInteresse(areaDeInteresse) + geradorDeQuery.verificaCpf(cpf) + geradorDeQuery.verificaRg(rg) + 
		geradorDeQuery.verificaIdade(idade) + geradorDeQuery.verificaSexo(sexo) +  geradorDeQuery.verificaCidade(cidade) + 
		geradorDeQuery.verificaEstado(estado) + geradorDeQuery.verificaBairro(bairro);
		
		searchQuery = geradorDeQuery.removerAndFinal(searchQuery);
		*/
		
		searchQuery = "rg:5";
		
		
		System.out.println("\nsearch query: " + searchQuery);
		
		try{
			luceneQuery = queryParser.parse(searchQuery);
			System.out.print("\nlucene query: " + luceneQuery.toString() );
		}
		catch (ParseException e) {
			throw new RuntimeException("Unable to parse query: " + searchQuery, e);
		}
	}
	
	/************************
	 * GETTERS/SETTERS
	 ***********************/

	public Query getLuceneQuery() {
		return luceneQuery;
	}

	public void setLuceneQuery(Query luceneQuery) {
		this.luceneQuery = luceneQuery;
	}

	public String getSearchQuery() {
		return searchQuery;
	}

	public void setSearchQuery(String searchQuery) {
		this.searchQuery = searchQuery;
	}

	public QueryParser getQueryParser() {
		return queryParser;
	}

	public void setQueryParser(QueryParser queryParser) {
		this.queryParser = queryParser;
	}
	
	

}
